package Shifu.MainServer.Net;

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * Interfaccia del MobileServer che verra utilizzata
 * della shell avviata sul server
 */

public interface LeecherShellPeerServer extends Remote {

	/**
	 * Scarica un file richiesto
	 * @param i index del file da scaricare
	 * @return 1 se ha avuto successo -1 altrimenti
	 * @exception RemoteException se ci sono problemi di connessione
	 */

	public int download(int i) throws RemoteException;

	/**
 	 * Restituisce la lista dei file presenti nel sistema
	 * @return lista dei file presenti
	 * @exception RemoteException se ci sono problemi di connessione
	 */

	public String fileList() throws RemoteException;

	
	/**
	 * Ritorna l'elenco dei peers presenti nel sistema
	 * @return lista dei peer presenti nel sistema
	 * @exception RemoteException se ci sono problemi di connessione
	 */

	public String peerList() throws RemoteException;


	/**
	 * Sconnette il PeerServer dal sistema
	 * @return 1 se ha avuto esito positivo,-1 altrimenti
	 * @exception RemoteException se ci sono problemi di connessione
	 */

	public int exit() throws RemoteException;


	/**
         * Avvia la shell presente nel PeerServer
         * @exception RemoteException se ci sono problemi di connessione
         */

	public void executeShell() throws RemoteException;

	/**
	 * Registra il peer al MainServer in modo da poter ricevere i chunk
         * @param username username del peer
	 * @return 1 se ha bun esito -1 altrimenti
         * @exception RemoteException se ci sono problemi di connessione
         */

	public int registrate(String username) throws RemoteException;	

	/**
	 * Aggiorna la shell e lo stub per il MainServer
	 * @exception RemoteException se ci sono problemi di connessione
         */

	public void upgrade() throws RemoteException;

}
